import { KoaContext } from '@/types/koa';

type ErrorType = {
  code: number;
  message: string;
  desc?: string;
}

export default (error: ErrorType, ctx: KoaContext) => {
  let status = 200;
  switch (error.code) {
    // tips 缺失必要参数
    case 400:
      status = 400;
      break;
    // tips 身份验证失败
    case 401:
      status = 401;
      break;
    // tips 理解但拒绝访问，该请求不应该出现
    case 403:
      status = 403;
      break;
    // tips 资源不存在
    case 404:
      status = 404;
      break;
    // tips 资源过期
    case 408:
      status = 408;
      break;
    // tips 资源存在冲突
    case 409:
      status = 409;
      break;
    // tips 资源存在且未销毁（比如手机验证码）
    case 429:
      status = 429;
      break;
    // tips 不确定的错误抛500
    default:
      status = 500;
  }

  // tips 错误日志基础模板
  const errorBasic = {
    method: ctx.method,
    api_interface: ctx.path,
  };
  ctx.utils.log4js.error(Object.assign(errorBasic, error));
  console.error('error:', error);

  ctx.status = status;
  ctx.body = error;
};
